#pragma once

#include "imcsettingvalue.h"

#include <vector>

namespace MCCommon
{

template< class T>
class /*MCAPI*/ MCVecValue: public IMCSettingValue
{
public:
    /**
     * Constructor.
     * 
     */
    MCVecValue
    (
        const std::vector< T >& values
    )
    {
        fValues = values;        
    }

    /**
     * Destructor.
     * 
     */
    virtual ~MCVecValue(void)
    {
    }

    /**
     * Create a new object of value.
     * 
     */
    virtual IMCSettingValue* Clone() const
    {
        MCVecValue* pVecValues = new MCVecValue( fValues );
        return pVecValues;        
    }
    
    /**
     * Get value type.
     * 
     */
    virtual ValueType GetValueType() const
    {
        return kVT_Vector;
    }   

    /**
     * Get bool
     * 
     */
    virtual bool GetBool() const
    {
        return false;
    }

    /**
     * Get integer.
     * 
     */
    virtual int GetInt() const
    {
        return 0;
    }

    /**
     * Get double.
     * 
     */
    virtual double GetDouble() const
    {
        return 0.0;
    }

    /**
     * Get string.
     * 
     */
    virtual std::string GetString() const
    {
        return "";
    }

    /**
     * Get vector values.
     * 
     */
    const std::vector<T>& GetVecValues() const  
    {
        return fValues;
    }

private:

    DISALLOW_COPY_AND_ASSIGN(MCVecValue);

private:
   
    // Values.
    std::vector< T > fValues;
};

} // end of namespace MCCommon.